package tv.acgn.advertisement.publish.service;

import java.util.List;

import org.springframework.stereotype.Service;
import tv.acgn.advertisement.publish.exception.AbstractAdPubException;
import tv.acgn.advertisement.publish.po.AdPlanPO;
import tv.acgn.advertisement.publish.vo.adplan.AdPlanGetRequestVO;
import tv.acgn.advertisement.publish.vo.adplan.AdPlanRequestVO;
import tv.acgn.advertisement.publish.vo.adplan.AdPlanResponseVO;

/**
 * @program: advertisement-ad-publish-service
 * @description: 推广计划 业务接口
 * @author: junG
 * @create: 2019-05-01 16:18
 **/

@Service
public interface AdPlanService {

    /**
     * 获取推广计划 AdPlan
     * @author junG
     * @description <h2>获取推广计划 AdPlan<h2/>
     * @date 23:04 2019/5/1
     * @param adPlanId [1]
     * @return {@link AdPlanPO}
     * @throws AbstractAdPubException 异常
     */
    AdPlanPO getAdPlan(String adPlanId) throws AbstractAdPubException;

    /**
     * <h2>根据用户身份码和推广计划名 查找唯一确定推广计划<h2>
     * @author junG
     * @description <h2>根据参数 查找推广计划 AdPlan<h2/>
     * @date 23:11 2019/5/1
     * @param adPlanRequestVO [1]
     * @return {@link AdPlanPO}
     * @throws AbstractAdPubException 异常
     */
    AdPlanPO findAdPlanByUserIdAndPlanName(AdPlanRequestVO adPlanRequestVO) throws AbstractAdPubException;

    /**
     * <h2>创建推广计划 AdPlan<h2/>
     * @author junG
     * @description <h2>创建推广计划 AdPlan<h2/>
     * @date 23:37 2019/5/1
     * @param adPlanRequestVO [1]
     * @return {@link AdPlanResponseVO}
     * @throws AbstractAdPubException 异常
     */
    AdPlanResponseVO addAdPlan(AdPlanRequestVO adPlanRequestVO) throws AbstractAdPubException;

    /**
     * <h2>变更推广计划 AdPlan<h2/>
     * @author junG
     * @description <h2>变更推广计划 AdPlan<h2/>
     * @date 23:39 2019/5/1
     * @param adPlanRequestVO [1]
     * @return {@link AdPlanResponseVO}
     * @throws AbstractAdPubException 异常
     */
    AdPlanResponseVO updateAdPlan(AdPlanRequestVO adPlanRequestVO) throws AbstractAdPubException;

    /**
     * <h2>删除推广计划 AdPlan<h2/>
     * @author junG
     * @description <h2>删除推广计划 AdPlan<h2/>
     * @date 23:42 2019/5/1
     * @param adPlanId [1]
     * @return {@link AdPlanResponseVO}
     * @throws AbstractAdPubException 异常
     */
    AdPlanResponseVO deleteAdPlan(String adPlanId) throws AbstractAdPubException;

    /**
     * <h2>批量获取推广计划<h2/>
     * @author junG
     * @description <h2>批量获取推广计划<h2/>
     * @date 23:43 2019/5/1
     * @param adPlanList [1]
     * @return {@link List<AdPlanPO>}
     * @throws AbstractAdPubException 异常
     */
    List<AdPlanPO> getAdPlanBatch(List<String> adPlanList) throws AbstractAdPubException;

    /**
     * 根据用户身份码 获取此用户全部推广计划
     * @author junG
     * @description 根据用户身份码 获取此用户全部推广计划
     * @date 0:54 2019/5/2
     * @param adPlanGetRequestVO [1]
     * @return {@link List<AdPlanPO>}
     * @throws AbstractAdPubException 异常
     */
    List<AdPlanPO> findAllAdPlanByUserId(AdPlanGetRequestVO adPlanGetRequestVO) throws AbstractAdPubException;

    /**
     * <h2>搜索推广计划<h2/>
     * @author junG
     * @description <h2>搜索查找推广计划<h2/>
     * @date 23:43 2019/5/1
     * @param adPlanRequestVOList [1]
     * @return {@link List<AdPlanPO>}
     * @throws AbstractAdPubException 异常
     */
    List<AdPlanPO> findAdPlan(AdPlanRequestVO adPlanRequestVO) throws AbstractAdPubException;

    /**
     * <h2>批量删除推广计划<h2/>
     * @author junG
     * @description <h2>批量删除推广计划<h2/>
     * @date 23:44 2019/5/1
     * @param adPlanIdList [1]
     * @return {@link List<AdPlanResponseVO>}
     * @throws AbstractAdPubException 异常
     */
    List<AdPlanResponseVO> deleteAdPlanBatch(List<String> adPlanIdList) throws AbstractAdPubException;
}
